/**
 * IPC 通信处理模块
 * 集中管理所有的 IPC 事件处理
 */
import { ipcMain, app } from 'electron'
import { getSplashWindow, createMainWindow, getMainWindow } from '../utils/windowManager'
import * as appIPC from './appIPC'
import * as systemIPC from './systemIPC'
import * as fileIPC from './fileIPC'
import * as windowIPC from './windowIPC'
import * as projectIPC from './projectIPC'
import { registerAllHandlers } from './handlers'
import { log } from '../services/logger'

/**
 * 设置所有 IPC 处理程序
 */
export function setupIPC(): void {
    log.info('设置基本 IPC 处理程序');

    // 注册新的类型安全处理器
    registerAllHandlers();

    // 测试IPC
    ipcMain.on('ping', () => console.log('pong'));

    // 获取应用版本
    ipcMain.handle('get-app-version', () => {
        console.log('处理 get-app-version 请求');
        return app.getVersion();
    });

    // 启动界面加载完成
    ipcMain.on('splash-ready', () => {
        console.log('收到 splash-ready 事件');

        // 模拟初始化任务
        setTimeout(() => {
            // 通知启动界面应用已准备就绪
            const splashWindow = getSplashWindow();
            if (splashWindow && !splashWindow.isDestroyed()) {
                console.log('发送 app-ready 事件到启动界面');
                splashWindow.webContents.send('app-ready');
            } else {
                console.log('启动窗口不可用，无法发送 app-ready 事件');
            }
        }, 2000);
    });

    // 启动界面完成，准备打开主窗口
    ipcMain.on('splash-complete', () => {
        console.log('收到 splash-complete 事件，准备打开主窗口');

        // 检查是否已经有主窗口存在
        const existingMainWindow = getMainWindow();
        if (!existingMainWindow || existingMainWindow.isDestroyed()) {
            createMainWindow();
        } else {
            console.log('主窗口已存在，聚焦到现有窗口');
            existingMainWindow.focus();
        }
    });

    // 尝试设置其他 IPC 处理程序
    try {
        if (appIPC && typeof appIPC.setupAppIPC === 'function') {
            console.log('设置 appIPC 处理程序');
            appIPC.setupAppIPC();
        }
    } catch (error: any) {
        console.error('设置 appIPC 处理程序失败:', error);
    }

    try {
        if (systemIPC && typeof systemIPC.setupSystemIPC === 'function') {
            console.log('设置 systemIPC 处理程序');
            systemIPC.setupSystemIPC();
        }
    } catch (error: any) {
        console.error('设置 systemIPC 处理程序失败:', error);
    }

    try {
        if (fileIPC && typeof fileIPC.setupFileIPC === 'function') {
            console.log('设置 fileIPC 处理程序');
            fileIPC.setupFileIPC();
        }
    } catch (error: any) {
        console.error('设置 fileIPC 处理程序失败:', error);
    }

    try {
        if (windowIPC && typeof windowIPC.setupWindowIPC === 'function') {
            console.log('设置 windowIPC 处理程序');
            windowIPC.setupWindowIPC();
        }
    } catch (error: any) {
        console.error('设置 windowIPC 处理程序失败:', error);
    }

    // 注释掉旧的项目IPC处理器，使用新的类型安全处理器
    // try {
    //     if (projectIPC && typeof projectIPC.setupProjectIPC === 'function') {
    //         console.log('设置 projectIPC 处理程序');
    //         projectIPC.setupProjectIPC();
    //     }
    // } catch (error: any) {
    //     console.error('设置 projectIPC 处理程序失败:', error);
    // }
} 